//
// Created by liushuai on 2020/3/17.
//
#include "removeNthFromEnd.h"
#include <iostream>
ListNode* removeNthFromEnd(ListNode* head, int n) {
    if(!head) // 空指针情况
        return nullptr;
    ListNode* fast = head;
    ListNode* slow = head;
    ListNode* preNode = nullptr;
    for(int i=0;i<n;i++)//快指针移动
        fast = fast->next;
    while (fast){
        fast = fast->next;
        preNode = slow;//保存删除指针的上一个节点
        slow = slow->next;
    }
    if(!preNode)
        return head->next;//删除节点为头的时候返回头节点下一个节点
    else
        preNode->next = slow->next;//不为头的时候直接用上一个节点指向下一个节点
    return head;

}